Computer programs are increasingly large and complex and evolving over time in order to add or modify features or fix defects affecting the operation of the computer programs. Often such programs are fragile, having many interrelated components and files such that modifications to one portion of the source code results in defects in another portion of the source code. Legacy programs that have been maintained over a relatively long period of time can be relatively difficult to modify due to numerous prior changes, lack of developer first-hand knowledge or adequate experience, poor documentation, inability to perform exhaustive testing, and large size of the source code, for example. While computer program maintenance is a difficult process, defects identified post-release can have significant implications including time and expense required to correct the defects, program unavailability during such corrective action, and a reduction in customer satisfaction.
In order to implement proposed modifications to a computer program, project managers must make personnel decisions in order to allocate developers and testers. It is desirable to allocate personnel intelligently and based on the difficulty and sensitivity of the proposed modifications, such as requiring more experienced developers to handle modification of source code files more likely to contain defects than other files.
However, current methods of identifying source code files that are more likely than other files to contain defects are not effective. Such methods are not universal with respect to the types of source code files and types of legacy computer programs capable of being analyzed, are configured to operate at too low a level to provide useful insight for a project manager, and/or are too heavyweight, requiring significant program analysis with minimal improvement in results.